package org.zmhhxl.user.domain.repository;

import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
import org.zmhhxl.api.auth.domain.entity.UserInfo;

import java.util.Optional;

public interface UserInfoRepository extends JpaRepository<UserInfo, Long> {
   /**
    * Find by email user info.
    *
    * @param email the email
    * @return the user info
    */
   @EntityGraph(attributePaths = {"authorities", "thirdPartyUsers"})
   Optional<UserInfo> findByEmail(String email);

   /**
    * 空值处理: Optional<UserInfo> 是一个可以为null的容器对象。
    * 如果值存在则为 UserInfo 对象，否则为 Optional.empty()。
    * 使用 Optional 可以避免 NullPointerException，
    *
    * API设计: Optional<UserInfo> 提供了多种方法来处理可能为null的情况，
    * 如 ofNullable orElse(), orElseGet(), ifPresent() 等，这使得代码更简洁和安全。
    *
    * Find by username user info.
    *
    * @param username the username
    * @return the user info
    */
   @EntityGraph(attributePaths = {"authorities", "thirdPartyUsers"})
   Optional<UserInfo> findByUsername(String username);
}
